<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //三.异步编程 解决回调地狱问题
        //举例：吃鸡
        //模拟的回调地狱的问题
        // setTimeout(function(){
        //  console.log("准备 鸡肉，洗好、切块");
        //  setTimeout(function(){
        //  		console.log("炒鸡");
        // setTimeout(function(){
        // 		console.log("炖鸡");
        // 		setTimeout(function(){
        // 				console.log("加调料");
        // 				setTimeout(function(){
        // 						console.log("吃鸡");
        // 				},5000);
        // 		},1000);
        // },3000);
        //  },2000);
        // },1000);

        //使用generator改写以上程序
        //准备工作
        function zhunbei(success) {
            setTimeout(function () {
                console.log("1.准备 鸡肉，洗好、切块");
                success();
            }, 2000);
        }
        //炒鸡
        function chaoji(success) {
            setTimeout(function () {
                console.log("2.炒鸡");
                success();
            }, 2000);
        }
        //炖鸡
        function dunji(success) {
            setTimeout(function () {
                console.log("3.炖鸡");
                success();
            }, 2000);
        }
        //加调料
        function tiaoliao(success) {
            setTimeout(function () {
                console.log("4.加调料");
                success();
            }, 2000);
        }
        //吃鸡
        function eat(success) {
            setTimeout(function () {
                console.log("5.吃鸡");
                success();
            }, 2000);
        }

        //流程控制
        //递归完成
        function run(fn) {
            const gen = fn();
            function next() {
                const result = gen.next();
                if (result.done) return;//吃鸡的流程结束了
                result.value(next);//next作为入参，在执行下一个工序
            }
            next();
        }

        //工序
        function* task() {
            yield zhunbei;
            yield chaoji;
            yield dunji;
            yield tiaoliao;
            yield eat;
        }

        //调用
        run(task);
    //总结： generator 迭代器，解决回调地狱
    //react  redux-saga 使用 的是 generator语法 （ dva umi  ）


    </script>
</body>

</html>